#include <stdio.h>
int MyFunction(int n); /* Prototype or declaration */
int main( void ) /* Calling function */{
printf("%d\n", MyFunction(6)); /* Error: forgot argument to MyFunction */
return 0;
}
int MyFunction( int n ) /* Called function definition */{
if (n == 0){
return 1;
}
else{
return n * MyFunction(n - 1);
}
}
強制轉型(coercion of argument)提到在C++中類型眾多short, int , float, double, unsigned int, 下往上轉當然沒問題只是多花記憶體空間但上往下轉比如: double轉成int或轉成unsigned int就可能造成資料丟失問題。
一般說我們說bool類型的值非True即Flase,int類型的值介於-2,147,483,648 至 2,147,483,647,但我們也可以使用enum自行定義類型例如月份: enum Months { JAN=1, FEB, MAR, APR, MAY, JUN, AUG, SEP, OCT, NOV, DEC};
三個儲存關鍵字auto, register, static,函式中的變數預設是auto當函式存在時存在,函式結束時根據最小授權原則principle of privilege會自動收回記憶體空間,以現今的語言來說C++已經是運行時最快的但在一些追求極致速度的系統中例如:交易系統C++還有一個關鍵字register可將變數存放於CPU的暫存器(register)不僅增加讀取速度更節省變數在register與memory間的反覆傳輸,運算速度整個Level Up,當然CPU的暫存器是彌足珍貴的所以這是一種建議性質關鍵字當CPU的暫存器空間不足還是會被丟回memory。
預設情況下當函數生命週期結束變數也會跟著一起被回收,如果想要變數生存在整個程式執行的期間就可以使用全域變數(Global var),然全域變數是所有函數都可以讀取,全域變數滿天飛常常是造成問題的根源,比較好的方式對區域變數使用static關鍵字進行最小授權。值得注意的是static用在全域變數或函式名稱時有不同用意。
有句話說「遞迴(recurse)只應天上有,凡人該當用迴圈(iterate)」,確實比起迴圈遞迴的使用更加困難,但也有些好處
反正像我這種凡人只有在研究所考試時寫河內塔, 求最大公因數等經典題目,工作後就很少遇到了就不多做介紹。